package com.free.dialog;

import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.jface.window.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;

/**
 * <p>
 * Title: Eclipse Plugin Development
 * </p>
 * <p>
 * Description: Free download
 * </p>
 * <p>
 * mail: ganshm@gmail.com
 * </p>
 */

public class InputDialogExample extends ApplicationWindow
{
    /**
     * GetInput constructor
     */
    public InputDialogExample()
    {
        super(null);
    }
    
    /**
     * Runs the application
     */
    public void run()
    {
        // Don't return from open() until window closes
        setBlockOnOpen(true);
        
        // Open the main window
        open();
        
        // Dispose the display
        Display.getCurrent().dispose();
    }
    
    /**
     * Configures the shell
     * 
     * @param shell the shell
     */
    protected void configureShell(Shell shell)
    {
        super.configureShell(shell);
        
        // Set the title bar text
        shell.setText("Get Input");
    }
    
    /**
     * Creates the main window's contents
     * 
     * @param parent the main window
     * @return Control
     */
    protected Control createContents(Composite parent)
    {
        Composite composite = new Composite(parent, SWT.NONE);
        composite.setLayout(new GridLayout(1, false)); // 只有一列
        
        // Create a label to display what the user typed in
        final Label label = new Label(composite, SWT.NONE);
        label.setText("This will display the user input from InputDialog");
        
        // Create the button to launch the error dialog
        Button show = new Button(composite, SWT.PUSH);
        show.setText("Get Input");
        show.addSelectionListener(new SelectionAdapter()
        {
            public void widgetSelected(SelectionEvent event)
            {
                
                // 新建输入对话框，并添加校验器
                InputDialog dlg = new InputDialog(Display.getCurrent().getActiveShell(), "", "Enter 5-8 characters", label.getText(), new LengthValidator());
                // 打开输入对话框
                if (dlg.open() == Window.OK)
                {
                    // 如果用户单击OK按钮，则给标签赋值
                    label.setText(dlg.getValue());
                }
            }
        });
        
        parent.pack();
        return composite;
    }
    
    /**
     * The application entry point
     * 
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        new InputDialogExample().run();
    }
}

/**
 * This class validates a String. It makes sure that the String is between 5 and 8 characters
 */
class LengthValidator implements IInputValidator
{
    /**
     * Validates the String. Returns null for no error, or an error message
     * 
     * @param newText the String to validate
     * @return String
     */
    // 校验用户的输入，newText为对话框的输入值
    public String isValid(String newText)
    {
        int len = newText.length();
        
        // Determine if input is too short or too long
        if (len < 5)
            return "Too short";
        if (len > 8)
            return "Too long";
        
        // 输入数据正确
        return null;
    }
}
